package controlLayer;
import java.util.ArrayList;
import modelLayer.*;

/**
 * Kontroller klasse for  SalgsKartotekCTR.
 * 
 * @author Gruppe 2 
 * @version 1.0
 */
public class SalgsKartotekCTR
{
    
    private SalgsKartotek sk;
    private AdresseBog ab;
    private VareKartotek vk;
    private UdlejningsKartotek uk;

    /**
     * Konstruktøren for klassen SalgsKartotekCTR
     */
    public SalgsKartotekCTR()
    {
        sk = SalgsKartotek.getInstance();
        ab = AdresseBog.getInstance();
        vk = VareKartotek.getInstance();
        uk = UdlejningsKartotek.getInstance();
    }

    /**
     * Metoden som skaber forbindelsen til opdatere ordre nr i model lageret.
     * @param long ordreNr
     * @param long nyOrdreNr
     */
    public void updateOrdreNr(long ordreNr, long nyOrdreNr)
    {
        sk.updateOrdreNr(ordreNr, nyOrdreNr);
    }

    /**
     * Denne metode opretter et objekt af Salg.
     * Så tilføjes et objekt af Kunde og Vare til objektet af Salg.
     * Til sidst tilføjes objektet af Salg til objektet af SalgKartotek.
     * 
     * @param String cprNr
     * @param long vid
     * @param long ordreNr
     * @param int total
     * @param int rabat
     * @param long uid
     */
    public void opretSalg(String cprNr,long stregkode, long vid, long ordreNr, int rabat, long uid)
    {
        Kunde k = ab.findKunde(cprNr);
        Vare v = vk.findVare(stregkode, vid);
        if(k != null && v != null)
        {       Salg s = new Salg(ordreNr, rabat, uid);
            s.addVare(v);
            s.addKunde(k);
            System.out.println("Salg er blevet oprettet");
            sk.addSalg(s);

        }
        else
        {
            System.out.println("Du mangler at oprette en vare og kunde");
            System.out.println("\n");
        }//end else

        
    }

    /**
     * Denne metode finder et objekt af Salg i objektet af SalgKartotek.
     * 
     * @param long ordrenr
     * @return Salg salg
     */
    public void findSalg(long ordrenr)
    {
        Salg s = sk.findSalg(ordrenr);
        if(s!=null)
        {
            System.out.println("***Information vedrørende salg***");
            System.out.println("Ordre nummer: "+s.getOrdreNr());
            System.out.println("Total pris: "+s.getTotal());
            System.out.println("Rabat: "+s.getRabat());
            System.out.println("\n");
        }
        else{
            System.out.println("Der findes ingen salg med det ordre nummer");
            System.out.println("\n");
        }
    }

    

    /**
     * Denne Metode sletter et objekt af Salg i objektet af SalgKartotek.
     * 
     * @param long ordreNr
     */
    public void sletSalg(long ordreNr)
    {
        sk.sletSalg(ordreNr);
    }
    
    /**
     * Denne metode tilføjer en udlejning til et salg.
     * @param long udlejningsId
     * @param long ordreNr
     */
    public void addUdlejning(long udlejningsId, long ordreNr)
    {
        Udlejning u = uk.findUdlejning(udlejningsId);
        sk.addUdlejning(u, ordreNr);
    }
    
    /**
     * Denne metode tilføjer en vare til et salg.
     * @param long stregkode
     * @param long vareId
     * @param long ordreNr
     */
    public void addVare(long stregkode, long vareId, long ordreNr)
    {
        Vare v = vk.findVare(stregkode, vareId);
        sk.addVare(v, ordreNr);
    }
    
    /**
     * Denne metode tilføjer en kunde til et salg.
     * @param String cprNr
     * @param long ordreNr
     */
    public void addKunde(String cprNr, long ordreNr)
    {
        Kunde k = ab.findKunde(cprNr);
        sk.addKunde(k, ordreNr);
    }
    
    /**
     * Denne metode sletter en kunde fra et salg.
     * @param String cprNr
     * @param long ordreNr
     */
    public void sletKunde(String cprNr, long ordreNr)
    {
        Kunde k = ab.findKunde(cprNr);
        sk.sletKunde(k, ordreNr);
    }
    
    /**
     * Denne metode opdatere totalen i et salg
     * @param long ordreNr
     * @param long id
     */
    public void updateTotal(long ordreNr, long id)
    {
        sk.updateTotal(ordreNr, id);
    }
    
    /**
     * Denne metode opdatere rabatten i et salg
     * @param long ordreNr
     * @param int rabat
     */
    public void updateRabat(long ordreNr, int rabat)
    {
        sk.updateRabat(ordreNr, rabat);
    }
    
    /**
     * Denne metode sender en liste med alle salg videre op til ui lageret.
     * @return ArrayList<String>
     */
    public ArrayList<String> printSalgsKartotek()
    {
        return sk.printSalgsKartotek();
    }

    
}
